Computers have become highly integrated in the workforce, in the home, in mobile devices, and many other places. Computers can process massive amounts of information quickly and efficiently. Software applications designed to run on computer systems allow users to perform a wide variety of functions including business applications, schoolwork, entertainment and more. Software applications are often designed to perform specific tasks, such as word processor applications for drafting documents, or email programs for sending, receiving and organizing email.
In many cases, software applications are designed to interact with other software applications or other computer systems. In some systems, such as parallel processing systems, multiple threads are used to process various portions of a software application. Processing threads can be assigned to a particular task such as application input/output (I/O) and can be reassigned as needed. At times, a thread (such as one assigned to I/O) may be left in a waiting state, where the thread is waiting for an input before it can process the next instruction. In such cases, the thread is said to be “spinning” or waiting in a loop. In such a state, the thread is typically designed to repeatedly check for the necessary input. If the thread does not receive the input for a certain amount of time, the thread “blocks” or goes to sleep.